9
תגובות

תבניות עיצוב וAOP

פתח mee ,
יש לי שתי שאלות
1. האם יש תבניות אחרות חוץ מMVC?
2. מה זה בעצם AOP ? (Aspect Oriented Programming)

9 תשובות

avatar ענה intval ב 12 לאוקטובר 2014 #

1. יש הרבה מאוד תבניות עיצוב. לא כולן הן תבניות אירגוניות (structural) לכן הם לא מה שאתה מחפש, אבל בוויקיפדיה יש רשימה שלמה של תבניות כאלו ואחרות. ביניהן גם MVP ו-MVVM. ישנן הרבה דרכים לארגן את הקוד, אך לא כולן זכו לפופואלריות או שמות משלהם.

2. AOP הוא גישה של הפרדת כל החלקים "הכלליים" מהתוכנה עצמה. למשל על פעולה כמו כתיבה ללוגים אפשר להסתכל לא כעל חלק נפרד מהחלקים האחרים של התוכנה ויחד עם זאת חלק משותף לכולם, לכן לפעמים אפשר להוסיף אותו לתוך הקוד בצורה נפרדת ולא כחלק מהמחלקה. בדרך כלל עושים את זה על ידי הוספת פעולות שמתבצעות לפני ואחרי מתודות אחרות, למשל ככה:

/*** @before: log('beforeTransfer')
@before: checkAuth
@require: sum > 0
***/

public function TransferMoney($from, $to, $sum)
{
  ...
}


ל-PHP קיימים כלים כמו
https://github.com/AOP-PHP/AOP
https://github.com/lisachenko/go-aop-php
לביצוע AOP

avatar ענה mee ב 16 לאוקטובר 2014 #

ולAOP יש כלים לגרום לפעולות שלי לעבוד לפני/אחרי/תוךכדי/לא יודע פעולות אחרות ? זה המטרה שלה בעצם?
ו2. זה הכרחי? לא יותר שימושי לעשות תנאי או פעולה לפני/אחרי/לא יודע מה ולחסוך את השימוש בAOP או שכדאי להשתמש בזה ?

avatar ענה intval ב 16 לאוקטובר 2014 #

לגבי השימושיות של זה - זה אולי יותר לצורך נוחות.
כתבת שורה מעל ועכשיו יש כתיבה ללוג לפני ואחרי שהמתודה מופעלת יחד עם הפרמטרים שהועברו לה, למשל.

באופן כללי AOP זה לא רק לפני, אחרי, במקום, אלא הוספה של משהו לקוד, בלי לשנות את הקוד עצמו. למרות שברוב המקרים בהחלט מדובר ב"לפני"-"אחרי".

avatar ענה mee ב 17 לאוקטובר 2014 #

ושרתים יכולים לתמוך בזה או שאני חייב שרת משלי כאילו שיהיה שלי פיזי? כי הבנתי בAOP-PHP שצריך להתקין את זה על גבי השרת
או שלא ?

וזה פוגע בביצועים? או שלא כלכך ?

avatar ענה Splash ב 17 לאוקטובר 2014 #

במקרה של הספריה שבחרת יש צורך בגישה להתקנת תוספים ,אני לא מכיר שרת שיתופי שמאפשר לך להתקין תוספים ל php אבל היום אתה יכול למצוא שרת וירטואלי במחירים סבירים שכן יתן לך את האפשרות.
עוד אפשרות זה ללכת על האפשרות השנייה שאלכס הביא שלא דורשת ממך להתקין ספריות -


טכנית זה ככל הנראה כן יעבוד לאט יותר ,אני לא יודע להגיד לך כמה זה באמת פוגע כי לא יצא לי להשתמש אבל בסופו של דבר משהו אמור לסרוק את הקבצים האלה.
פתרון נחמד שקיים החל מ laravel 5 הוא שימוש ב gulp יחד עם watch ובעצם רק כאשר הקובץ ישתנה אז הפונקציה תרוץ.
בנוסף מאחר וזה נשמר תחת קובץ cache מסויים ניתן להריץ גם את החלק של ה gulp על המחשב הפרטי והפעולות עדיין יעבדו גם אם בשרת עצמו לא מותקן npm/gulp או כל ספריה אחרת.

avatar ענה mee ב 17 לאוקטובר 2014 #

מה ההבדל בין שרת שיתופי לשרת וירטואלי? היום אני מתרגל על המחשב האישי שלי אבל בעתיד אני מאמין שארצה לעבור לשרת
האפשרות השנייה נראה לי מסובכת מדי מבחינת התפעול, לפחות לפי הREADME
מה זה GULP בעצם ?

avatar ענה Splash ב 17 לאוקטובר 2014 #

אממ אתה יכול למצוא הסבר מעמיק יותר בויקיפדיה ואתרים שקשורים לתחום אך בכל אני אתן הסבר על קצה המזלג -
אחסון שיתופי זה אחסון שבו כל המשתמשים רצים על אותו מחשב והדבר היחיד שמפריד ביניהם זה תיקיות[והרשאות מן הסתם] ,באחסון מסוג זה אתה מאוד תלוי במי שמאוחסן איתך משום שאם הוא נמצא תחת מתקפה מסויימת גם אתה נמצא תחתיה או כמו שאומרים אם אני נופל אתה נופל איתי.
מדובר חבילה הזולה ביותר בד"כ ורוב האחסונים לא נותנים לך יותר מידי אפשרויות לשחק עם ההגדרות.

שרת וירטואלי לעומת זאת מוגדר כתת מחשב,תחשוב שלמשל יש לנו מחשב עם 32 גיגה ראם ו 12 ליבות.
שרת וירטואלי מאפשר לי לחלק את אותם נתונים למשתמשים,ככה שלמשתמש א יהיה 4 גיגה ראם וליבה וירטואלית אחת.במידה ואותו שרת מועמס יתר על המידה מבחינת ראם\מעבד רק אותו שרת יפגע מאחר והוא לא יכול לנצל את המשאבים שלך.
אפשר לומר שכמעט ולא תרגיש בהבדל במידה והשרת מוגדר כמו שצריך הוא יתפקד כמו מחשב רגיל ויהיו לך בדיוק את אותם היכולות כמו שיש לך במחשב הפרטי כך שיש לך יותר שליטה על מה שקורא בפועל ועל ההגדרות של השרת.
מה שכן יש מאוד להיזהר בהזמנה של שרת וירטואלי מחברות לא מוכרות שכן הרבה חברות מוכרות לך לפעמים נתונים מאוד מרשימים במחירים מאוד זולים [לפעמים אפילו יותר מהאחסון השיתופי] אך בפועל מעולם לא תזכה להשתמש בנתונים הללו מאחר ועוד משתמש חולק איתך אותם [או מה שנקרא over selling]
אותו דבר אגב קורא גם בשרת שיתופי,הרבה פעמים תראה "שטח אחסון ללא הגבלה" או תעבורה ללא הגבלה,זה לא פחות מטריק ציני של יחצנות,ברגע שתגיע למכסה מסויימת אתה תגלה מהר מאוד שכן יש הגבלה.

בנוסף לשני אלו יש גם שרת יעודי,במקרה כזה מדובר בדיוק כמו המחשב שיש לך בבית רק שבד"כ יש לו נתונים הרבה יותר מרשימים,בין אם במעבד,זכרון וירטואלי,כרטיס רשת,קירור וכו'
שרת זה אפשר להשכיר מחברות אחסון ולמעשה,בדיוק כמו בשרת הוירטואלי יש לך שליטה מלאה על כל מה שקורא.
אפשר לומר שבמקרה הזה אתה עצמאי לגמרי ורק במידה ויש תקלה במחשב\האינטרנט של החברת אחסון קורס לא תוכל לספק את השירותים שלך.

לגבי gulp אם אתה לא יודע מה זה אולי עדיף שתדלג על התחום הזה בנתיים,אם כל פעם שתשמע מושג חדש אתה תקפוץ אליו אתה לא תגיע לשום מקום,תתרכז במשהו אחד ומשם תתקדם.
ובכל זאת אני יענה בקצרה [הסברים מפורטים,מדריכים וכו' אתה יכול למצוא בגוגל],gulp היא ספריה שמיועדת עבור nodejs ומשתמשת ביכולות של השפה על מנת לבצע מספר פעולות כגון minify,join,uglify וכך בעצם ,אם בעבר הייתה צריך לעשות את הפעולות האלה בצורה ידנית \ תוך כדי קימפול הקוד היום הספריה הזאת עושה את זה בשבילך בעזרת כמה שורות קוד בודדות ובכך שומרת על סדר מסויים בין הקוד שאמור להיות מוצג למשתמש לבין הקוד המקורי.
זה לא היכולות היחידות אבל אפשר לומר שזה הבסיס.

avatar ענה mee ב 17 לאוקטובר 2014 #

הבנתי תודה רבה על ההסבר :)

avatar ענה intval ב 19 לאוקטובר 2014 #

הספריה השניה ( https://github.com/lisachenko/go-aop-php ) לא דורשת שום התקנות ורוב הסיכויים שתוכל להשתמש בה בכל שרת